<!DOCTYPE html>
<html>
  <!-- meta/link... -->
  



<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport">
  <!-- Global site tag (gtag.js) - Google Analytics -->


  <title>Hexo</title>

  
    
<link rel="stylesheet" href="/js/aos/aos.css">

  

  <link rel="icon" type="image/x-icon, image/vnd.microsoft.icon" href="/favicon.ico">
  <link rel="stylesheet" href="https://at.alicdn.com/t/font_1911880_c1nvbyezg17.css">
  <link href="https://cdn.bootcdn.net/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">

  
    <script>
        var themeModelId = '';
        if (themeModelId) {
            localStorage.setItem('modelId', themeModelId);
        }
    </script>
    
    <script src="https://cdn.jsdelivr.net/gh/yuang01/live2d-widget@latest/autoload.js"></script>
    <script>
        var live2dOpen = eval('true') || false;
        if (!live2dOpen) {
            localStorage.setItem('waifu-display', 1609323474481);
        }
    </script>
  
  
<link rel="stylesheet" href="/css/animate.min.css">

  
<link rel="stylesheet" href="/css/style.css">

  
  
    
<link rel="stylesheet" href="/js/fancybox/jquery.fancybox.min.css">

  
  
    
<link rel="stylesheet" href="/js/shareJs/share.min.css">

  
  <style>
        @media (max-width: 992px) {
            #waifu {
                display: none;
            }
        }
    </style>
    <script src="//cdn.bootcss.com/pace/1.0.2/pace.min.js"></script>
    <link href="//cdn.bootcss.com/pace/1.0.2/themes/pink/pace-theme-flash.css" rel="stylesheet">

    
        <script src="/js/valine/av-min@3.0.4.js"></script>
        <script src="https://cdn.jsdelivr.net/gh/HCLonely/Valine@latest/dist/Valine.min.js"></script>
    
<meta name="generator" content="Hexo 5.4.0"></head>

  
  <!-- 依赖于jquery和vue -->
  <script src="/js/jquery3.5.1.js"></script>
  <script src="/js/vue2.6.11.js"></script>
  
  <body>
    <!-- 预加载动画 -->
    <!-- 页面预加载动画 -->

<div id='loader'>
  <link rel="stylesheet" href="/js/loaded/index.css" >
  <div class="loading-left-bg"></div>
  <div class="loading-right-bg"></div>
  <div class="spinner-box">
    <div class="configure-border-1">
      <div class="configure-core"></div>
    </div>
    <div class="configure-border-2">
      <div class="configure-core"></div>
    </div>
    <div class="loading-word">loading...</div>
  </div>
</div>

<script>
  var endLoading = function () {
    document.body.style.overflow = 'auto';
    document.getElementById('loader').classList.add("loading");
  }
  window.addEventListener('DOMContentLoaded',endLoading);
  
</script>

    
    <!-- 判断是否为暗黑风格 -->
    <!-- 判断是否为黑夜模式 -->
<script>
  let isDark = JSON.parse(localStorage.getItem('dark')) || JSON.parse('false');

  if (isDark) {
    $(document.body).addClass('darkModel');
  }
</script>

    <!-- 头部导航等 -->
    
<header class="header " id="navHeader"
  style="position: fixed;
  left: 0; top: 0; z-index: 10;width: 100%;"
>
  <div class="header-content">
    <div class="bars">
      <div id="appDrawer" class="sidebar-image">
  <div class="drawer-box-icon">
    <i class="fa fa-bars" aria-hidden="true" @click="showDialogDrawer"></i>
  </div>
  
  <transition name="fade">
    <div class="drawer-box_mask" v-cloak style="display: none;" v-show="visible" @click.self="cancelDialogDrawer">
    </div>
  </transition>
  <div class="drawer-box" :class="{'active': visible}">
    <div class="drawer-box-head bg-color">
      <img class="drawer-box-head_logo" src="/medias/logo.png" alt="logo">
      <h3 class="drawer-box-head_title">Hexo</h3>
      <h5 class="drawer-box-head_desc"></h5>
    </div>
    
    <div class="drawer-box-content">
      <ul class="drawer-box-content_menu">
        
        
          <li class="drawer-box-content_item">
            <a target="_blank" rel="noopener" href="https://github.com/yuang01/hexo-theme-bamboo">
              <i class="fa fa-github" aria-hidden="true"></i>
              <span>Github</span>
            </a>
          </li>
        
      </ul>
    </div>
  </div>
</div>

<script>
  var body = document.body || document.documentElement || window;
  var vm = new Vue({
    el: '#appDrawer',
    data: {
      visible: false,
      top: 0,
      openArr: [],
    },
    computed: {
    },
    mounted() {
    },
    methods: {
      isOpen(index) {
        if (this.openArr.includes(index)) {
          return true;
        } else {
          return false;
        }
      },
      openOrCloseMenu(curIndex) {
        const index = this.openArr.indexOf(curIndex);
        if (index !== -1) {
          this.openArr.splice(index, 1);
        } else {
          this.openArr.push(curIndex);
        }
      },
      showDialogDrawer() {
        this.visible = true;
        // 防止页面滚动，只能让弹框滚动
        this.top = $(document).scrollTop()
        body.style.cssText = 'width: 100%; height: 100%;overflow: hidden;';
      },
      cancelDialogDrawer() {
        this.visible = false;
        body.removeAttribute('style');
        $(document).scrollTop(this.top)
      }
    },
    created() {}
  })
</script>

    </div>
    <div class="blog-title" id="author-avatar">
      
        <div class="avatar">
          <img src="/medias/logo.png" alt="logo">
        </div>
      
      <a href="/" class="logo">Hexo</a>
    </div>
    <nav class="navbar">
      <ul class="menu">
        
      </ul>
      
      
        <div id="appSearch">
  <div class="search"  @click="showDialog()"><i class="fa fa-search" aria-hidden="true"></i></div>
  <transition name="fade">
    <div class="message-box_wrapper" style="display: none;" v-cloak v-show="dialogVisible" @click.self="cancelDialogVisible()">
      <div class="message-box animated bounceInDown">
        <!-- <div class="close" style="overflow: hidden;">
          <i class="fa fa-close" aria-hidden="true" style="float:right;" @click.self="cancelDialogVisible()"></i>
        </div> -->
        <h2>
          <span>
            <i class="fa fa-search" aria-hidden="true"></i>
            <span class="title">Search</span>
          </span>
          <i class="fa fa-close close" pointer style="float:right;" aria-hidden="true" @click.self="cancelDialogVisible()"></i>
        </h2>
        <form class="site-search-form">
          <input type="text"
            placeholder="Please enter keywords"
            id="local-search-input" 
            @click="getSearchFile()"
            class="st-search-input"
            v-model="searchInput"
          />
        </form>
        <div class="result-wrapper">
          <div id="local-search-result" class="local-search-result-cls"></div>
        </div>
      </div>
    </div>
  </transition>
</div>
<script src="/js/local_search.js"></script>
<script>
  var body = document.body || document.documentElement || window;
  var vm = new Vue({
    el: '#appSearch',
    data: {
      dialogVisible: false,
      searchInput: '',
      top: 0,
    },
    computed: {
    },
    mounted() {
    },
    methods: {
      showDialog() {
        this.dialogVisible = true;
        // 防止页面滚动，只能让弹框滚动
        this.top = $(document).scrollTop()
        body.style.cssText = 'overflow: hidden;';
      },
      getSearchFile() {
        if (!this.searchInput) {
          getSearchFile("/search.xml");
        }
      },
      cancelDialogVisible() {
        this.dialogVisible = false;
        body.removeAttribute('style');
        $(document).scrollTop(this.top)
      },
    },
    created() {}
  })
</script>
<!-- 解决刷新页面闪烁问题，可以在元素上添加display: none, 或者用vue.extend方法，详情：https://blog.csdn.net/qq_31393401/article/details/81017912 -->
<!-- 下面是搜索基本写法 -->
<!-- <script type="text/javascript" id="local.search.active">
  var inputArea = document.querySelector("#local-search-input");
  inputArea.onclick   = function(){ getSearchFile(); this.onclick = null }
  inputArea.onkeydown = function(){ if(event.keyCode == 13) return false }
</script> -->

      

    </nav>
  </div>
  
    <a target="_blank" rel="noopener" href="https://github.com/yuang01/hexo-theme-bamboo" class="github-corner color-primary" aria-label="View source on GitHub"><svg width="60" height="60" viewBox="0 0 250 250" style="fill:#fff; position: absolute; top: 0; border: 0; right: 0;" aria-hidden="true"><path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path><path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"></path><path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"></path></svg></a><style>.github-corner:hover .octo-arm{animation:octocat-wave 560ms ease-in-out}@keyframes octocat-wave{0%,100%{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}@media (max-width:500px){.github-corner:hover .octo-arm{animation:none}.github-corner .octo-arm{animation:octocat-wave 560ms ease-in-out}}</style>
  
  

    <!-- 当头部导航设置为背景透明的时候  -->
    
      <script src="/js/header/index.js" data-pjax></script>
    
</header>

    <!-- 需要在上面加载的js -->
    <script>
    function loadScript(src, cb) {
        setTimeout(function () {
            var HEAD = document.getElementsByTagName('head')[0] || document.documentElement;
            var script = document.createElement('script');
            script.setAttribute('type', 'text/javascript');
            if (cb) script.onload = cb;
            script.setAttribute('src', src);
            HEAD.appendChild(script);
        });
    }

    //https://github.com/filamentgroup/loadCSS
    var loadCSS = function (href, before, media, attributes) {
        var doc = window.document;
        var ss = doc.createElement("link");
        var ref;
        if (before) {
            ref = before;
        }
        else {
            var refs = (doc.body || doc.getElementsByTagName("head")[0]).childNodes;
            ref = refs[refs.length - 1];
        }
        var sheets = doc.styleSheets;
        if (attributes) {
            for (var attributeName in attributes) {
                if (attributes.hasOwnProperty(attributeName)) {
                    ss.setAttribute(attributeName, attributes[attributeName]);
                }
            }
        }
        ss.rel = "stylesheet";
        ss.href = href;
        ss.media = "only x";
        function ready(cb) {
            if (doc.body) {
                return cb();
            }
            setTimeout(function () {
                ready(cb);
            });
        }
        ready(function () {
            ref.parentNode.insertBefore(ss, (before ? ref : ref.nextSibling));
        });
        var onloadcssdefined = function (cb) {
            var resolvedHref = ss.href;
            var i = sheets.length;
            while (i--) {
                if (sheets[i].href === resolvedHref) {
                    return cb();
                }
            }
            setTimeout(function () {
                onloadcssdefined(cb);
            });
        };
        function loadCB() {
            if (ss.addEventListener) {
                ss.removeEventListener("load", loadCB);
            }
            ss.media = media || "all";
        }
        if (ss.addEventListener) {
            ss.addEventListener("load", loadCB);
        }
        ss.onloadcssdefined = onloadcssdefined;
        onloadcssdefined(loadCB);
        return ss;
    };
    
</script>
 

<!-- 轮播图所需要的js -->
<script src="/js/swiper/swiper.min.js"></script>
<script src="/js/swiper/vue-awesome-swiper.js"></script>
<script src="/js/swiper/swiper.animate1.0.3.min.js"></script>


  <script src="/js/vue-typed-js/index.js"></script>


<!-- 首页的公告滚动插件的js需要重新加载 -->
<script src="/js/vue-seamless-scroll/index.js"></script>

<!-- 打字机效果js -->
<script src="https://cdn.jsdelivr.net/npm/typed.js@2.0.11"></script>


    <!-- 内容区域 -->
    <main class="main" id="pjax-container" style="margin-top: 0;">
      <!-- 首页轮播 -->
<link href="/js/swiper/swiper@5.4.1.min.css" rel="stylesheet">


  <link href="/js/vue-typed-js/index.css" rel="stylesheet">






<div class="swiper-length" style="display: none;">0</div>
<div id="appSwiper"
  class="swiper-no-swiping"
  @mouseenter="stopAutoPlay()" 
  @mouseleave="startAutoPlay()"
>
  <swiper v-cloak ref="mySwiper" :options="swiperOptions" @slideChangeTransitionEnd="slideChangeTransitionEnd">
    
      <swiper-slide>
        <div class="item swiper-lazy" data-background="https://img11.360buyimg.com/ddimg/jfs/t1/160978/33/20686/2476596/6083e62dEa588862b/63f8f2163ab61b2f.png" style="background-size: 300000px; 
          background-position: left center;" style="position: relative;">
          <div class="swiper-bgmask" style="position: absolute;top: 0;left: 0;width: 100%;height: 100%;"></div>
            <div class="flag">
              
              <div class="img-mask swiper-lazy swiper-default-bgImg" data-background="https://img11.360buyimg.com/ddimg/jfs/t1/160978/33/20686/2476596/6083e62dEa588862b/63f8f2163ab61b2f.png" style="height: 100%; background-size: cover; 
                background-position: center center;">
                <div class="swiper-lazy-preloader swiper-lazy-preloader-white"></div>   
              </div>
              <div class="flag-text">
                <div class="flag-text-content">
                  <div class="title ani animated" swiper-animate-effect="fadeInDown" swiper-animate-duration="0.2s" swiper-animate-delay="0.1s">青墨书晚风</div>
                  
                    <div class="ani animated default-excerpt" swiper-animate-effect="fadeInDown" swiper-animate-duration="0.2s" swiper-animate-delay="0.1s">
                      <vue-typed-js :strings="defaultDesc" :loop="defaultDescTypedLoop" :type-speed="100" :back-speed="50">
                        <h1 class="typing"></h1>
                      </vue-typed-js>
                    </div>
                    
                </div>
                <div style="display: flex;" class="flag-text-btns">
                  
                    <div class="ani animated" swiper-animate-effect="fadeInDown" swiper-animate-duration="0.2s" swiper-animate-delay="0.1s"><a target="_blank" rel="noopener" href="https://yuang01.gitee.io/2021/02/08/hexo-theme-bamboo-new/" class="read-more swiper-btn-color" style="display: inline-block; z-index:1;">阅读文档</a></div>
                  
                  
                    <div class="ani animated" style="margin-left: 10px;" swiper-animate-effect="fadeInDown" swiper-animate-duration="0.2s" swiper-animate-delay="0.1s"><a target="_blank" rel="noopener" href="https://gitee.com/yuang01/hexo-theme-bamboo/repository/archive/dev.zip" class="read-more swiper-btn-color2" style="display: inline-block; z-index:1;border: 1px solid white;">下载主题</a></div>
                  
                </div>
              </div>
            </div>
          </div>
      </swiper-slide>
    
  </swiper>
  
    <div id="scroll-down" @click="toPostContent()">
      <a href="javascript:;">
        <i class="fa fa-angle-down scroll-down-effects"></i>
      </a>
    </div>
  
  <canvas id="header_canvas"style="position:absolute;bottom:0;width:100%;pointer-events:none;"></canvas>
</div>

<script type="text/javascript">
  Vue.use(window.VueAwesomeSwiper)
</script>

<script>
  var autoplay = JSON.parse('false');
  var delay = '5000';
  var loop = JSON.parse('true') ? false : JSON.parse('true');
  var effect = 'slide';
  var swiperLength = parseInt(document.querySelector(".swiper-length").innerText);
  var defaultDesc = '';
  defaultDesc = defaultDesc.split(',');
  var defaultDescTypedLoop = JSON.parse('true');
  var vm = new Vue({
    el: '#appSwiper',
    data: {
      defaultDesc: defaultDesc,
      defaultDescTypedLoop,
      swiperOptions: {
        pagination: {
          el: '.swiper-pagination',
          clickable: true // 允许点击小圆点跳转
        },
        loop: loop ? true : false,
        effect, // fade
        autoplay: (autoplay && swiperLength > 1) ? {
  　　　　delay,
  　　　　disableOnInteraction: false // 手动切换之后继续自动轮播
    　　} : false,
        navigation: {
          nextEl: '.swiper-button-next',
          prevEl: '.swiper-button-prev',
        },
        lazy: {
          loadPrevNext: true,
        },
        on:{
          init: function() {
            swiperAnimateCache(this); //隐藏动画元素 
            swiperAnimate(this); //初始化完成开始动画
          }, 
          slideChangeTransitionEnd: function(){ 
            swiperAnimate(this); //每个slide切换结束时也运行当前slide动画
          } 
        }
        // Some Swiper option/callback...
      }
    },
    computed: {
      swiper() {
        return this.$refs.mySwiper.$swiper
      }
    },
    mounted() {
      // console.log('Current Swiper instance object', this.swiper)
      // this.swiper.slideTo(0, 1000, false)
    },
    methods: {
      stopAutoPlay() {
        (autoplay && swiperLength > 1) && this.swiper.autoplay.stop();
      },
      startAutoPlay() {
        (autoplay && swiperLength > 1) && this.swiper.autoplay.start();
      },
      slideChangeTransitionEnd() {
        console.log('1');
      },
      toPostContent() {
        const fullHeight = $(window).height() - 60;
        $('html,body').animate({scrollTop: fullHeight},500);
      }
    },
    created() {}
  })
</script>

  <script src="/js/bubble/homeBubble.js"></script>

<style>
#appSwiper {
  position: relative;
  user-select: none;
}
.default-excerpt {
  font-size: 1.6rem;
  margin-top: 1rem;
  font-family: Titillium Web,'PingFang SC','Hiragino Sans GB','Microsoft JhengHei','Microsoft YaHei',sans-serif;
}
.bottom-one-btn {
  margin-top: 15px;
}
.swiper-container {
  overflow: hidden;
  z-index: 0;
}
.swiper-slide {
  height: 350px;
  position: relative;
}
.swiper-button-prev,
.swiper-button-next {
  padding: 10px 10px;
  transition: background 0.2s;
}
.swiper-button-prev:hover,
.swiper-button-next:hover {
  background: rgba(0, 0, 0, 0.2);
}
.swiper-slide .item {
  width: 100%;
  height: 100%;
}
.flag {
  position: relative;
  width: 60%;
  margin: 0 auto;
  color: #ffffff;
  height: 100%;
  background: #000;
}
.flag img {
  min-height: 100%;
}
.flag-text {
  position: absolute;
  top: 50px;
  left: 50px;
  width: 80%;
  height: 280px;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  z-index: 9999;
}
.flag-text .title {
  font-size: 1.8rem;
  font-family: Long Cang,cursive;
}
.flag-text .title a {
  color: #fff;
  transition: color 0.3s;
}
.flag-text .title a:hover {
  color: #42b983;
}
.flag-text .excerpt {
  color: #eee;
  font-family: Ubuntu,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;
  width: 70%;
  line-height: 30px;
  height: 150px;
  margin-top: 2%;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 5;
  overflow: hidden;
}
.swiper-pagination-bullet-active {
  opacity: 1;
  background-color: #42b983;
}
.img-mask {
  opacity:0.6; filter: alpha(opacity=60);
}
.flag-text .read-more {
  margin-bottom: 30px;
  padding: 5px 15px;
  color: #ffffff;
  border-radius: 20px;
}
#scroll-down {
  position: absolute;
  bottom: 10px;
  left: 50%;
  transform: translateX(-50%);
  font-size: 2.5rem;
  color: #fff;
  cursor: pointer;
  z-index: 2;
}
#scroll-down a {
  color: #fff;
}
@-webkit-keyframes rightan
  {
  
  0%
  {
    transform: translateY(0);
    opacity: 0.5;
  }
  50% {
    transform: translateY(-30px);
    opacity: 1;
  }
  100%
  {
    transform: translateY(0);
    opacity: 0.5;
  }
}
.scroll-down-effects {
  animation: rightan 1.5s infinite;
}
/* 当头部导航设置为背景透明的时候 */

  .swiper-slide {
    height: 400px;
  }
  .flag-text {
    top: 80px;
  }


@media (min-width: 992px) {
  .swiper-button-prev {
    margin-left: 20%;
    transform: translateX(-180%);
  }
  .swiper-button-next {
    margin-right: 20%;
    transform: translateX(180%);
  }
  .flag-text .title {
    width: 80%;
    line-height: 35px;
    max-height: 70px;
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 2;
    overflow: hidden;
  }
}
@media (max-width: 992px) {
  .flag {
    width: 100%;
  }
  .flag-text .title {
    font-size: 1.5rem;
    margin-top: 50px;
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 2;
    overflow: hidden;
  }
  .flag-text {
    position: absolute;
    top: 0;
    left: 0;
    width: 80%;
    height: 100%;
    margin-left: 50%;
    transform: translateX(-50%);
  }
  .flag-text .excerpt {
    width: 100%;
    line-height: 25px;
    height: 125px;
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 5;
    overflow: hidden;
  }
  .flag-text .read-more {
    margin-bottom: 80px;
  }
}
@media (max-width: 992px) and (min-width: 551px) {
  .flag-text .excerpt {
    width: 70%;
  }
}
@media (max-width: 551px) {
  .swiper-slide {
    height: 250px;
  }
  .flag-text .title {
    line-height: 30px;
    max-height: 60px;
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 2;
    overflow: hidden;
    margin-top: 20px;
  }
  .flag-text .excerpt {
    font-size: 1rem;
    line-height: 20px;
    height: 80px;
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 4;
  }
  .flag-text .excerpt { 
    margin-top: 10px;
  }
  .flag-text .read-more {
    margin-top: 10px;
    margin-bottom: 50px;
  }
  .swiper-button-prev,
  .swiper-button-next {
    transform: scale(0.5);
  }
  .swiper-button-prev {
    left: 0;
  }
  .swiper-button-next {
    right: 0;
  }
}
/* 当头部导航设置为背景透明的时候 */

  @media (max-width: 992px) {
    .flag-text {
      top: 60px;
      height: 80%;
    }
  }
  @media (max-width: 551px) {
    .swiper-slide {
      height: 310px;
    }
  }


/* 文字或者按钮居中显示 */

  .flag-text {
    left: 10%;
  }
  .flag-text .flag-text-content {
    width: 100%;
    text-align: center;
  }
  .flag-text .title {
    width: 100%;
    text-align: center;
  }
  .flag-text .excerpt { 
    width: 100%;
    text-align: center;
  }
  .bottom-one-btn {
    display: flex;
    justify-content: center;
  }
  .default-excerpt {
    display: flex;
    justify-content: center;
    font-size: 1.6rem;
    font-family: Titillium Web,'PingFang SC','Hiragino Sans GB','Microsoft JhengHei','Microsoft YaHei',sans-serif;
  }
  .flag-text-btns {
    justify-content: center;
  }
  @media (min-width: 992px) {
    .flag-text .excerpt {
      line-height: 30px;
      display: -webkit-box;
      -webkit-box-orient: vertical;
      -webkit-line-clamp: 5;
      overflow: hidden;
    }
  }
  @media (max-width: 992px) {
    .flag-text {
      margin-left: 0;
      transform: translateX(0);
    }
  }




/* 全屏显示 */

  .flag {
    width: 100%;
  }
  .swiper-slide {
    height: calc(100vh - 60px);
    
      height: 100vh;
    
  }
  .flag-text {
    top: 50%;
    left: 15%;
    transform: translateY(-50%);
    width: 70%;
    height: auto;
  }
  .flag-text .title {
    font-size: 2.8rem;
    line-height: 1.5em;
    max-height: none;
    /* overflow: visible; */
  }
  .flag-text .excerpt {
    font-size: 1.25rem;
    height: 150px;
  }
  .flag-text .read-more {
    margin-top: 10px;
  }
  .swiper-button-prev,
  .swiper-button-next {
    margin-top: -60px!important;
  }
  .swiper-btn-color,
  .swiper-btn-color2 {
    background-color: transparent;
    border: 1px solid #fff;
  }
  .swiper-btn-color:hover,
  .swiper-btn-color2:hover {
    background-color: #42b983;
    border: 1px solid #42b983!important;
  }
  .flag-text-btns {
    justify-content: center;
  }
  .swiper-button-prev {
    margin-left: 10px;
    transform: translateX(0);
    border-radius: 50%;
    padding: 0;
    width: 50px;
    height: 50px;
  }
  .swiper-button-next {
    margin-right: 10px;
    transform: translateX(0);
    border-radius: 50%;
    padding: 0;
    width: 50px;
    height: 50px;
  }
  .swiper-button-next:after, .swiper-button-prev:after {
    font-size: 1.2rem;
  }
  @media (min-width: 992px) {
    .flag-text .excerpt {
      line-height: 35px;
      height: 175px;
    }
    .default-excerpt {
      min-height: 150px;
    }
    .typed-element {
      align-items: unset;
    }
  }
  @media (max-width: 992px) {
    .flag-text {
      margin-left: 0;
      height: 60%;
      top: 55%;
    }
    .flag-text .title {
      font-size: 2.4rem;
      margin-top: 0;
      display: -webkit-box;
      -webkit-box-orient: vertical;
      -webkit-line-clamp: 2;
      overflow: hidden;
    }
    .flag-text .excerpt {
      line-height: 35px;
      height: 185px;
    }
    .flag-text .read-more {
      margin-top: 20px;
    }
  }
  @media (max-width: 551px) {
    .flag-text {
      height: 60%;
    }
    .flag-text .title {
      font-size: 2.2rem;
    }
    .flag-text .excerpt {
      line-height: 30px;
    }
    .flag-text .read-more {
      margin-top: 50px;
      padding: 10px 30px;
    }
    .swiper-button-prev {
      margin-left: 0;
    }
    .swiper-button-next {
      margin-right: 0;
    }
    .default-excerpt {
      margin-top: 1rem;
    }
  }


/* video */
.swiper-video {
  width: 100%;
  height: 100%;
}
.swiper-video video {
  pointer-events: none;
}
.swiper-video-maskBox{
  position: absolute;
  top: 0;
  left: 0;
  height: 100%;
  width: 100%;
  background-color: #000;
  opacity: 0.2;
  z-index: 1;
}
@media (min-width: 992px) {
  
    .swiper-video {
      display: none;
    }
    .swiper-default-bgImg {
      display: block;  
    }
  
}
@media (max-width: 992px) {
  .swiper-video {
    display: none;
  }
  .swiper-default-bgImg {
    display: block;  
  }
}
/* video-end */
</style>
<!-- 首页座右铭 -->

  <div class="motto">
      <h3 class="motto-title">座右铭</h3>
      <div class="motto-content">
        <p>
          沉淀后我愿意做个温暖的人，有自己的喜好，有自己的原则，有自己的信仰，不急功近利，不浮夸轻薄。宠辱不惊，淡定安逸，心静如水，不忘初心，方得始终。——凌茜  
        </p> 
      </div>
  </div>

<!-- 首页公告 -->

<style>
  .index-notice-content {
    margin-top: 10px;
  }
  .warp {
    width: 100%;
    margin: 0 auto;
    overflow: hidden;
  }
  .index-notice-content__ul {
    list-style: none;
    padding: 0;
    margin: 0 auto;
  }
  .index-notice-content__ul li,
  .index-notice-content__ul a {
    display: block;
    height: 30px;
    line-height: 30px;
    display: flex;
    justify-content: space-between;
    font-size: 15px;
  }
  .index-notice-content__title {
    flex: 1;
    overflow: hidden;
  }
  .index-notice-content__title a,
  .index-notice-content__title span {
    overflow: hidden;
    display: block;
    text-overflow:ellipsis; 
    white-space: nowrap;
    height: 100%;
    width: 100%;
    color: #000;
  }
  .index-notice-content__title a:hover,
  .index-notice-content__title span:hover {
    text-decoration: underline;
  }
  .index-notice-content__date {
    min-width: 80px;
    margin-left: 5px;
    color: #000;
  }
</style>
<div class="index-notice" id="appIndexNotice">
    <h3>
      <i class="fa fa-bullhorn index-notice-icon"></i>公告
    </h3>
    <div class="index-notice-content">
      
      <vue-seamless-scroll
        :data="listData"
        :class-option="classOption"
        class="warp"
        style="height: 0px"
      >
        <ul class="index-notice-content__ul">
          
           
        </ul>
      </vue-seamless-scroll>
    </div>
</div>
<script src="/js/vue-seamless-scroll/index.js"></script>

<!-- 滚动插件采用 vue-seamless-scroll
  https://chenxuan0000.github.io/vue-seamless-scroll/zh/guide/06-singleStop.html 
-->

<script>
  var seamless = JSON.parse('false');
  seamless = seamless ? 0 : 30;
  var listData = '' || '';
  listData = listData.split(',');
  var vm = new Vue({
    el: '#appIndexNotice',
    data: {
      listData: listData,
      moveNum: 2,
      classOption: {
        singleHeight: seamless,
        limitMoveNum: listData.length
      },
    },
    computed: {
    },
    mounted() {
    },
    methods: {
    },
    created() {
      this.moveNum = parseInt(this.listData.length);
    }
  })
</script>



<!-- 首页文章置顶 -->



<div class="topArticle" data-aos="fade-up">
	<h3><i class="fa fa-thumbs-o-up" aria-hidden="true"></i>Recommend Articles</h3>
	<div class="articles">
		
			
		
	</div>
</div>


<!-- hash算法 -->

<div class="bg-floor" id="home-bg-floor" style="position: fixed;left: 0;top: 0;width: 100%;height: 100%;z-index: -2;"></div>
<section class="posts">
  
    <article class="post" data-aos="fade-up" style="flex-direction: row-reverse;   ">
      <div class="post-main">
        <div class="post-info">
          <div class="post-time">
            <i class="fa fa-clock-o" aria-hidden="true"></i>
            <span class="post-time">2021-07-28</span>
          </div>
          <div class="post-title">
            <a class="post-title-link" href="/2021/07/28/hello-world/">Hello World</a>
          </div>
          <div class="post-meta">
            <div class="post-tags">
              <!-- 文章详情页的标签 -->

            </div>
            <div class="post-categories">
              <!-- 文章详情页的分类 -->


            </div>
          </div>
          <div class="post-img-mobile">
            
              
              <a href="/2021/07/28/hello-world/" class="lazyload" data-original="/medias/7.jpg" style="background-size: cover; 
                background-position: center center;">
              </a>
            
          </div>
          <div class="post-content">
            Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hex
          </div>
        </div>
        <div class="post-more">
          <a href="/2021/07/28/hello-world/">
            <i class="iconfont iconmore" pointer style="float: right;  " title="阅读更多"></i>
          </a>
        </div>
      </div>
      <div class="post-img">
        
          <a href="/2021/07/28/hello-world/" class="lazyload" data-original="/medias/7.jpg" style="background-size: cover; 
            background-position: center center;">
          </a>
        
      </div>
    </article>
  
</section>
<!-- 翻页 -->


<!-- 花瓣和雪花飘落 -->
<!-- 雪花和花瓣特效 -->



<!-- 灯笼 -->


    </main>

    <!-- 页脚 -->
    <div class="footer bg-color">
  <div class="footer-main">
    <div class="link">
      
    </div>
    <div class="footer-copyright">
      <p>Copyright © 2019 - 2020 <a target="_blank" rel="noopener" href="https://github.com/yuang01">yuang01</a> | Powered by <a target="_blank" rel="noopener" href="https://hexo.io/zh-cn/docs/">Hexo</a> | Theme <a target="_blank" rel="noopener" href="https://github.com/yuang01/theme">Bamboo</a> </p>

    </div>
    <div class="footer-custom">
      
    </div>
    <!-- 不蒜子统计 -->
    
      
  <!-- 不蒜子统计 -->
  <span id="busuanzi_container_site_pv">
        <i class="fa fa-eye" aria-hidden="true"></i>Total visits：<span id="busuanzi_value_site_pv"></span> times
  </span>
  <span class="post-meta-divider">|</span>
  <span id="busuanzi_container_site_uv" style='display:none'>
        <i class="fa fa-users" aria-hidden="true"></i>Number of visitors：<span id="busuanzi_value_site_uv"></span> people
  </span>
  <script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js" data-pjax></script>

    
  </div>
</div>


    <!-- 渲染暗黑按钮 -->
    
      <div class="dark">
  <div class="dark-content">
    <i class="fa fa-moon-o" aria-hidden="true"></i>
    <!-- <span>关灯</span> -->
  </div>
  
</div>

<script>
  $(function() {
    let isDark = JSON.parse(localStorage.getItem('dark'))  || JSON.parse('false');
    if (isDark) {
      $(".dark-content").replaceWith(
          `
          <div class='dark-content'>
            <i class="fa fa-lightbulb-o" aria-hidden="true"></i>
          </div>
          `
        );
    }
    $('.dark').click(function() {
      if ($(document.body).is('.darkModel')) {
        $(document.body).removeClass('darkModel');
        localStorage.setItem('dark', false);
        $(".dark-content").replaceWith(
          `
          <div class='dark-content'>
            <i class="fa fa-moon-o" aria-hidden="true"></i>
          </div>
          `
        );
      } else {
        $(document.body).addClass('darkModel');
        localStorage.setItem('dark', true);
        $(".dark-content").replaceWith(
          `
          <div class='dark-content'>
            <i class="fa fa-lightbulb-o" aria-hidden="true"></i>
          </div>
          `
        );
      }
    })
  })
</script>
    
    <!-- 渲染回到顶部按钮 -->
    
      <div class="goTop top-btn-color" pointer>
  <i class="fa fa-arrow-up" aria-hidden="true"></i>
</div>
<script src="/js/goTop.js"></script>
    
    <!-- 渲染左下角音乐播放器 -->
    
      <link rel="stylesheet" href="/js/aplayer/APlayer@1.10.1.min.css">
<style>
.aplayer .aplayer-lrc p {
  
  font-size: 12px;
  font-weight: 700;
  line-height: 16px !important;
}

.aplayer .aplayer-lrc p.aplayer-lrc-current {
  
  font-size: 15px;
  color: #42b983;
}


.aplayer.aplayer-fixed.aplayer-narrow .aplayer-body {
  left: -66px !important;
}

.aplayer.aplayer-fixed.aplayer-narrow .aplayer-body:hover {
  left: 0px !important;
}


</style>
<meting-js  
  class=""
  server="tencent"
  type="playlist"
  id="8062553743"
  fixed='true'
  autoplay='false'
  theme='#42b983'
  loop='all'
  order='random'
  preload='auto'
  volume='0.7'
  list-folded='true'
>
</meting-js>

<!-- <style>
  #aplayer {
    position: fixed;
    left: 0;
    bottom: 300px;
  }
</style> -->
<script src="https://cdn.bootcdn.net/ajax/libs/aplayer/1.10.1/APlayer.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/meting@2/dist/Meting.min.js"></script>
    

    <!-- 图片放大 -->
    
      <script src="/js/fancybox/jquery.fancybox.min.js"></script>
    

    <!-- 百度解析 -->
    <!-- Baidu Analytics -->

    <!-- Baidu Push -->

<script>
    (function () {
        var bp = document.createElement('script');
        var curProtocol = window.location.protocol.split(':')[0];
        if (curProtocol === 'https') {
            bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
        } else {
            bp.src = 'http://push.zhanzhang.baidu.com/push.js';
        }
        var s = document.getElementsByTagName("script")[0];
        s.parentNode.insertBefore(bp, s);
    })();
</script>

    
    <!-- 背景彩带 -->
    
      <script type="text/javascript" size="100" alpha='0.4' zIndex="-1" src="/js/ribbon.min.js"></script>
    
    
    <script src="/js/app.js" data-pjax></script>
    
    <!-- 文章目录所需js -->
<link href="/js/tocbot/tocbot.css" rel="stylesheet">
<script src="/js/tocbot/tocbot.min.js"></script>

<script>
  var headerEl = 'h2, h3, h4',  //headers 
      content = '.post-detail',//文章容器
      idArr = {};  //标题数组以确定是否增加索引id
      //add #id
  var option = {
    // Where to render the table of contents.
    tocSelector: '.toc',
    // Where to grab the headings to build the table of contents.
    contentSelector: content,
    // Which headings to grab inside of the contentSelector element.
    headingSelector: headerEl,
    scrollSmooth: true,
    scrollSmoothOffset: -80,
    headingsOffset: -($(window).height() * 0.4 - 45),
    positionFixedSelector: '.toc-main',
    positionFixedClass: 'is-position-fixed',
    fixedSidebarOffset: 'auto',
  }
  if ($('.toc').length > 0) {

    $(content).children(headerEl).each(function () {
      //去除空格以及多余标点
      var headerId = $(this).text().replace(/[\s|\~|`|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\_|\+|\=|\||\|\[|\]|\{|\}|\;|\:|\"|\'|\,|\<|\.|\>|\/|\?|\：|\，|\。]/g, '');

      headerId = headerId.toLowerCase();
      if (idArr[headerId]) {
        //id已经存在
        $(this).attr('id', headerId + '-' + idArr[headerId]);
        idArr[headerId]++;
      }
      else {
        //id未存在
        idArr[headerId] = 1;
        $(this).attr('id', headerId);
      }
    });

    tocbot.init(option);
    
  }


  document.addEventListener('pjax:send', function () {
    if ($('.toc').length) {
      tocbot.destroy();
    }
  });

  document.addEventListener('pjax:complete', function () {
    if ($('.toc').length) {
      tocbot.init(option);
    }
  });

  
</script>

<style>
.is-position-fixed {
  position:sticky !important;
  top: 74px;
}
.toc-main ul {
  counter-reset: show-list;
}
.toc-main ul li::before {
  content: counter(item)".";
  display: block;
  position: absolute;
  left: 12px;
  top:0;
}
/* .toc > .toc-list {
  padding-left: 35px;
}
.toc>.toc-list li {
  list-style: decimal;
}
.toc-list {
  padding-left: 25px;
} */
</style> 

<!-- 渲染issues标签里的内容 -->
<script>
  function loadIssuesJS() {
    if ($(".post-detail").find(".issues-api").length == 0) {
      return;
    } 
    loadScript('/js/issues/index.js');
  };
  $(function () {
    loadIssuesJS();
  });
  document.addEventListener('pjax:complete', function () {
    if (typeof IssuesAPI == "undefined") {
      loadIssuesJS();
    }
  })
</script>

<!-- div滚动到显示区域的动画 -->

  <script src="/js/aos/aos.js"></script>
  <script>
    // https://github.com/michalsnik/aos
    var themeOffset = parseInt('120') || 120;
    var themeDelay = parseInt('0') || 0;
    var themeDuration = parseInt('400') || 400;
    var themeEasing = 'ease' || 'ease';
    var themeOnce = eval('true') || false;
    var themeMirror = eval('false') || false;
    var themeAnchorPlacement = 'top-bottom' || 'top-bottom';
    AOS.init({
      // Global settings:
      disable: false, // accepts following values: 'phone', 'tablet', 'mobile', boolean, expression or function
      startEvent: 'DOMContentLoaded', // name of the event dispatched on the document, that AOS should initialize on
      initClassName: 'aos-init', // class applied after initialization
      animatedClassName: 'aos-animate', // class applied on animation
      useClassNames: false, // if true, will add content of `data-aos` as classes on scroll
      disableMutationObserver: false, // disables automatic mutations' detections (advanced)
      debounceDelay: 50, // the delay on debounce used while resizing window (advanced)
      throttleDelay: 99, // the delay on throttle used while scrolling the page (advanced)

      // Settings that can be overridden on per-element basis, by `data-aos-*` attributes:
      offset: themeOffset, // offset (in px) from the original trigger point
      delay: themeDelay, // values from 0 to 3000, with step 50ms
      duration: themeDuration, // values from 0 to 3000, with step 50ms
      easing: themeEasing, // default easing for AOS animations
      once: themeOnce, // whether animation should happen only once - while scrolling down
      mirror: themeMirror, // whether elements should animate out while scrolling past them
      anchorPlacement: themeAnchorPlacement, // defines which position of the element regarding to window should trigger the animation

    });

    document.addEventListener('pjax:complete', function () {
      AOS.refresh();
    })
  </script>


<!-- 输入框打字特效 -->
<!-- 输入框打字特效 -->

  <script src="/js/activate-power-mode.js"></script>
  <script>
    POWERMODE.colorful = true;  // 打开随机颜色特效
    POWERMODE.shake = false;    // 关闭输入框抖动
    document.body.addEventListener('input', POWERMODE);//监听打字事件
  </script>


<!-- markdown代码一键复制功能 -->

  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/v-plugs-ayu/lib/ayu.css">
  <script src="https://cdn.jsdelivr.net/npm/v-plugs-ayu/lib/ayu.umd.min.js"></script>
  <script src="/js/clipboard/clipboard.min.js"></script>
  <div id="appCopy">
  </div>
  <script data-pjax>
    var vm = new Vue({
      el: '#appCopy',
      data: {
      },
      computed: {
      },
      mounted() {
        const that = this;
        var copy = 'copy';
        /* code */
        var initCopyCode = function () {
          var copyHtml = '';
          copyHtml += '<button class="btn-copy" data-clipboard-snippet="" style="position:absolute;top:0;right:0;z-index:1;">';
          copyHtml += '<i class="fa fa-copy"></i><span>' + copy + '</span>';
          copyHtml += '</button>';
          $(".post-detail pre").not('.gutter pre').wrap("<div class='codeBox' style='position:relative;width:100%;'></div>")
          $(".post-detail pre").not('.gutter pre').before(copyHtml);
          new ClipboardJS('.btn-copy', {
            target: function (trigger) {
              return trigger.nextElementSibling;
            }
          });
        }
        initCopyCode();
        $('.btn-copy').unbind('click').bind('click', function () {
          doSomething();
        })
        $(document).unbind('keypress').bind('keypress', function (e) {
          if (e.ctrlKey && e.keyCode == 67) {
            doSomething();
            // 返回false, 防止重复触发copy事件  
            // return false;
          }
        })
        //  监听 ctrl + c事件  
        // $(document).unbind('keypress').bind('keypress', function (e) {
        //   if (e.ctrlKey && e.keyCode == 67) {
        //     doSomething();
        //     // 返回false, 防止重复触发copy事件  
        //     return false;
        //   }
        // })

        // // 鼠标右键的复制事件  
        // $(document).unbind('copy').bind('copy', function (e) {
        //   doSomething();
        // });

        function doSomething() {
          that.$notify({
            title: "成功",
            content: "代码已复制，请遵守相关授权协议。",
            type: 'success'
          })
        }
      },
      methods: {
      },
      created() { }
    })
  </script>


<!-- 图片懒加载 -->
<script src="/js/lazyload/lazyload@1.9.1.js"></script>
<script data-pjax>
  $(function () {
    $("div.lazyload, img.lazyload, a.lazyload").lazyload(
      {
        effect: "show",
        placeholder: "https://img10.360buyimg.com/ddimg/jfs/t1/159345/8/2271/222193/5ff7b36fEe49f5663/a95287c20385127f.gif"    //图片未加载出来时显示的占位图
      }
    );
  });
</script>

<!-- 评论所需js -->

    
        <!-- 弹幕所需的css和js -->
        
<!-- 具体js，请前往valine/script.ejs查看 -->

        <script>
  var requiredFields = '';
  requiredFields = requiredFields.split(',');
  comment_el = '.comment';
  let looperValine = null;
  load_valine = function () {
    if ($(comment_el).length) {
      var valine = new Valine({
        el: '#vcomment',
        path: window.location.pathname,
        notify: false,
        verify: false,
        app_id: "",
        app_key: "",
        placeholder: "客官，说点什么吧",
        avatar: "",
        master: "",   //博主邮箱md5
        tagMeta: ["博主","小伙伴","访客"],     //标识字段名
        friends: "",
        metaPlaceholder: { "nick": "昵称/QQ号", "mail": "邮箱" },
        requiredFields: requiredFields,
        enableQQ: true,
      });
      function debounce(fn) {
        var timerID = null
        return function () {
          var arg = arguments[0]   //获取事件
          if (timerID) {
            clearTimeout(timerID)
          }
          timerID = setTimeout(function () {
            fn(arg)              //事件传入函数
          }, 200)
        }
      }
      //查询评论 valine.Q('*').limit(7) -- 查询所有，限制7条, 下面的的代码是查询当前页面
      var themeDanmu = eval('false');
      var themeLoop = eval('false');
      var themeLooperTime = '5000' || 5000;
      var speed = '40' || 20;
      var isBarrager = true;
      if (themeDanmu == true) {
        do_barrager();
        if ($('.danmuBox').length <= 0) {
          $('.navbar').append('<div class="danmuBox"><div class="danmuBtn open"><span class="danmuCircle"></span><span class="danmuText">弹幕</span></div></div>');
        }
        $('.danmuBtn').on('click', debounce(
          function () {
            if ($('.danmuBtn').hasClass('open')) {
              $('.danmuBtn').removeClass('open')
              clearInterval(looperValine);
              $.fn.barrager.removeAll();
            } else {
              $('.danmuBtn').addClass("open");
              do_barrager();
            }
          }
        ))
      }
      function do_barrager() {
        isBarrager && valine.Q(window.location.pathname).find().then(function (comments) {
          // var num = 0; // 可以记录条数，循环调用的时候只取最新的评论放入弹幕中
          var run_once = true;
          var looper_time = themeLooperTime;
          var total = comments.length;
          // var looper = null;
          var index = 0;
          if (total > 0) {
            barrager();
          } else {
            // 当评论数为0的时候，自动关闭弹幕
            // $('.danmuBtn').removeClass('open');
          }
          function barrager() {
            if (run_once) {
              //如果是首次执行,则设置一个定时器,并且把首次执行置为false
              looperValine = setInterval(barrager, looper_time);
              run_once = false;
            }
            var content = comments[index]._serverData.comment;
            var email = comments[index]._serverData.mail;
            var link = comments[index]._serverData.link;
            var newcontent = content.substring(0, 50).replace(/<[^>]+>/g, "");
            //发布一个弹幕
            const item = {
              img: `https://q1.qlogo.cn/g?b=qq&nk=${email}&s=640`, //图片 
              info: newcontent, //文字 
              href: link, //链接 
              close: true, //显示关闭按钮 
              speed: speed, //延迟,单位秒,默认6 
              color: '#fff', //颜色,默认白色 
              old_ie_color: '#000000', //ie低版兼容色,不能与网页背景相同,默认黑色
            }
            $('body').barrager(item);
            //索引自增
            index++;
            //所有弹幕发布完毕，清除计时器。
            if (index == total) {
              clearInterval(looperValine);
              if (themeLoop === true) {
                setTimeout(function () {
                  do_barrager();
                }, 5000);
              } else {
                $('.danmuBtn').removeClass('open');
              }
              return false;
            }

          }
        })
      }
    }
  };
  $(document).ready(load_valine);
  document.addEventListener('pjax:send', function (e) {
    
  })
  document.addEventListener('pjax:complete', function () {
    load_valine();
  });
</script>
    


<!-- 鼠标点击特效 -->
<!-- 爱心点击 -->

	
		<canvas class="fireworks" style="position: fixed;left: 0;top: 0;z-index: 999; pointer-events: none;" ></canvas>
		<script src="//cdn.bootcss.com/animejs/2.2.0/anime.min.js"></script>
		<script src="/js/cursor/explosion.min.js"></script>
	




    <!-- pjax -->
    

<!-- pjax -->


  <script src="/js/pjax@0.2.8/index.js"></script>
  
    <!-- 样式位于：source/css/_third-party/pjaxanimate.styl -->

<div class="pjax-animate">
  
    <div class="loading-circle"><div id="loader-circle"></div></div>
    <script>
      window.ShowLoading = function() {
        $(".loading-circle").css("display", "block");
      };
      window.HideLoading = function() {
        $(".loading-circle").css("display", "none");
      }
    </script>
  
	<script>
    document.addEventListener('pjax:complete', function () {
      window.HideLoading();
    })
    document.addEventListener('pjax:send', function () {
      window.ShowLoading();
    })
    document.addEventListener('pjax:error', function () {
      window.HideLoading();
    })
	</script>
</div>

  

  <script>
    var pjax = new Pjax({
      elements: 'a[href]:not([href^="#"]):not([href="javascript:void(0)"])',   // 拦截正常带链接的 a 标签
      selectors: ["#pjax-container","title"],                                   // 根据实际需要确认重载区域
      cacheBust: false,   // url 地址追加时间戳，用以避免浏览器缓存
      timeout: 5000
    });

    document.addEventListener('pjax:send', function (e) {

      try {
        var currentUrl = window.location.pathname;
        var targetUrl = e.triggerElement.href;
        var banUrl = [""];
        if (banUrl[0] != "") {
          banUrl.forEach(item => {
            if(currentUrl.indexOf(item) != -1 || targetUrl.indexOf(item) != -1) {
              window.location.href = targetUrl;
            }
          });
        }
      } catch (error) {}

      $(window).unbind('resize');
      $(window).unbind('scroll');
      $(document).unbind('scroll');
      $(document).unbind('click');
      $('body').unbind('click');

    })
    
    document.addEventListener('pjax:complete', function () {
      $('script[data-pjax], .pjax-reload script').each(function () {
        $(this).parent().append($(this).remove());
      });
    });

    document.addEventListener('pjax:error', function (e) {
      window.location.href = e.triggerElement.href;
    })
  </script>



  </body>
</html>